package com.joymart.common.utils;
import com.joymart.common.error.handling.JoymartBusinessException;

import java.util.regex.Pattern;

public class ValidationUtils {

    private ValidationUtils() {
    }

    // 抛出自定义异常的私有方法
    private static void throwValidationException(String message) {
        throw new JoymartBusinessException(message);
    }

    // 用户名验证：长度在 3-20 个字符之间，只能包含字母、数字、下划线
    public static void validateUsername(String username) {
        String regex = "^[a-zA-Z0-9_]{3,20}$";
        if (!Pattern.matches(regex, username)) {
            throwValidationException("用户名必须是 3 到 20 个字符，只能包含字母、数字和下划线。");
        }
    }
    // 邀请人验证：长度固定为 5 个字符，且只能包含指定的字符
    public static void validateInvitedBy(String inviteCode) {
        String regex = "^[ABCDEFGHJKLMNPQRSTUVWXYZ23456789]{5}$";
        if (!Pattern.matches(regex, inviteCode)) {
            throwValidationException("邀请码必须是 5 个字符，只能包含 A-Z（不含 I, O）和 2-9 之间的数字。");
        }
    }

    public static void validateNickname(String nickname) {
        String regex = "^[a-zA-Z0-9_\\u4e00-\\u9fa5]{2,20}$";
        if (!Pattern.matches(regex, nickname)) {
            throwValidationException("昵称必须是 2 到 20 个字符，可以包含字母、数字、下划线和中文，但不能包含空格。");
        }
    }

    // 密码验证：至少 8 个字符，包含字母和数字
    public static void validatePassword(String password) {
        String regex = "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$";
        if (!Pattern.matches(regex, password)) {
            throwValidationException("密码必须至少包含 8 个字符，并同时包含字母和数字。");
        }
    }
    // 手机号验证（中国手机号）：以 1 开头，第二位是 3-9 之间的数字，后面是 9 位数字
    public static void validatePhone(String phone) {
        String regex = "^1[3-9]\\d{9}$";
        if (!Pattern.matches(regex, phone)) {
            throwValidationException("手机号无效，必须是有效的中国手机号。");
        }
    }

    // 图片地址验证：以 .jpg、.jpeg、.png、.gif 等结尾
    public static void validateImageUrl(String url) {
        String regex = "^(https?://.*\\.(?:png|jpg|jpeg|gif))$";
        if (!Pattern.matches(regex, url)) {
            throwValidationException("图片地址无效，必须以 .png、.jpg、.jpeg 或 .gif 结尾。");
        }
    }

    // 邮箱验证：标准的电子邮件格式
    public static void validateEmail(String email) {
        String regex = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
        if (!Pattern.matches(regex, email)) {
            throwValidationException("邮箱地址无效，请提供一个有效的邮箱地址。");
        }
    }

    // URL 验证：简单的 URL 格式验证
    public static void validateUrl(String url) {
        String regex = "^(https?|ftp)://[^\s/$.?#].[^\s]*$";
        if (!Pattern.matches(regex, url)) {
            throwValidationException("URL 地址无效，请提供一个有效的 URL 地址。");
        }
    }

    // 身份证号验证：简化版 18 位身份证号验证
    public static void validateIdCard(String idCard) {
        String regex = "^[1-9]\\d{5}(?:18|19|20)\\d{2}\\d{2}\\d{2}\\d{3}[Xx]$";
        if (!Pattern.matches(regex, idCard)) {
            throwValidationException("身份证号无效，请提供一个有效的 18 位身份证号。");
        }
    }

    // 车牌号验证：简化版车牌号验证（中国车牌）
    public static void validateCarPlate(String carPlate) {
        String regex = "^[A-Z][A-Z0-9]{5,6}$";
        if (!Pattern.matches(regex, carPlate)) {
            throwValidationException("车牌号无效，请提供一个有效的车牌号。");
        }
    }

}
